//class Base
//{
//    public int a;
//    public int b;
//    public int c=199;
//
//    public void methodBase(){
//        System.out.println("Base");
//    }
//
//
//}
//class Derived extends Base
//{
//    public int c=9;
//    public void func()
//    {
//        System.out.println(a);
//        System.out.println(b);
//        System.out.println(c);//子类有，优先子类，之类没有则优先父类
//        System.out.println(super.c);//访问父类
//    }
//    public void methodBase(){
//        System.out.println("Derived");
//    }
//    public void fun()
//    {
//        methodBase();//优先子类
//        super.methodBase();//访问父类方法
//    }
//}
//
////class Derived extends Base
////{
////    public char b=102;
////    public int c=103;
////    public void func()
////    {
////        System.out.println(a);
////        System.out.println(b);
////        System.out.println(c);//子类有，优先子类，之类没有则优先父类
////        System.out.println(super.c);
////    }
////}
//public class Test {
//    public static void main(String[] args) {
//        Derived der=new Derived();
//        der.func();
//        der.fun();
//    }
//}



//class Myvalue  //交换两个数
//{
//    public int val;
//}
//public class Test {
//
//    public static void swap( Myvalue myv1, Myvalue myv2)
//    {
//        int temp=myv1.val;
//        myv1.val=myv2.val;
//        myv2.val=temp;
//    }
//    public static void main(String[] args) {
//        Myvalue myvalue1=new Myvalue();
//        myvalue1.val=10;
//        Myvalue myvalue2=new Myvalue();
//        myvalue2.val=20;
//        swap(myvalue1,myvalue2);
//        System.out.println(myvalue1.val);
//        System.out.println(myvalue2.val);
//    }
//}



//class Myvalue//私有类交换两个数
//{
//    private int val;
//
//    public int getVal() {
//        return val;
//    }
//
//    public void setVal(int val) {
//        this.val = val;
//    }
//}
//public class Test {
//
//    public static void swap( Myvalue myv1, Myvalue myv2)
//    {
//        int temp=myv1.getVal();
//        myv1.setVal(myv2.getVal());
//        myv2.setVal(temp);
//    }
//    public static void main(String[] args) {
//        Myvalue myvalue1=new Myvalue();
//        myvalue1.setVal(10);
//        Myvalue myvalue2=new Myvalue();
//        myvalue2.setVal(20);
//        swap(myvalue1,myvalue2);
//        System.out.println(myvalue1.getVal());
//        System.out.println(myvalue2.getVal());
//    }
//}



//class Animal
//{
//    String name;
//    int age;
//    public void eat()
//    {
//        System.out.println(age+" 岁");
//        System.out.println(name + " 正在吃饭");
//    }
//
//
//}
//
//class Dog extends Animal
//{
//
//    public void  wangwang()
//    {
//        System.out.println(name + " 汪汪汪~~~");
//    }
//
////    public static void func(Animal animal)
////    {
////        animal.eat();
////    }
//
//    @Override//注解，表示这个方法被重写
//    public void eat()
//    {
//        //重写
//        //1.方法名称相同
//        //2.参数列表相同
//        //3.返回值相同
//        System.out.println(age+" 岁");
//        System.out.println(name + " 正在吃狗粮");
//    }
//
//}
// class Cat extends Animal{
//    public void mew()
//    {
//        System.out.println(name + "  喵喵喵~~~");
//    }
//
//     @Override
//     public void eat() {
//         //重写
//         //1.private修饰的方法不能被重写
//         //2.static修饰的方法不能被重写
//         //3.子类的访问修饰符限定权限，要大于等于父类的权限  private <默认< protect<public
//         //4.被final修饰的方法不能被重写，此时被称为 “密封方法”
//         System.out.println(age+" 岁");
//         System.out.println(name + " 正在吃猫粮");
//     }
// }
//
//public class Test {
//
//    public static void func(Animal animal)//向上转型  传参
//    {
//        animal.eat();
//    }
//    //多态:当父类引用 引用的对象不一样的时候,表现出来的行为是不一样的！！！
//    public static Animal fun()//向上转型
//    {
//        return new Dog();
//    }
//
//    public static void main1(String[] args) {
//        Animal animal1=new Dog();//向下转型
//        Dog dog=(Dog)animal1;
//        dog.name="坦克";
//        dog.wangwang();
//    }
//    public static void main(String[] args) {
////        Dog dog = new Dog();
////        dog.name="坦克";
////        dog.age=10;
////        dog.eat();
////        dog.wangwang();
////        Cat cat=new Cat();
////        cat.name="咪咪";
////        cat.age=20;
////        cat.eat();
////        cat.mew();
//        Animal animal1=new Dog();//向上转型//父类引用（aninal）指向子类对象(Dog)
//        animal1.name="坦克";
//        animal1.age=30;
//        func(animal1);
//        fun();
//       // animal1.eat();
//        //animal1.wangwang();//在发生向上转型时，通过父类的引用只能访问父类有的成员属性或方法，不能访问子类特有的成员属性或方法
//        Animal animal2=new Cat();
//        animal2.name="咪咪";
//        animal2.age=20;
//        animal2.eat();
//
//    }
//}




class Shape {
    //属性....
    public void draw() {
        System.out.println("画图形！");
    }
}
class Rect extends Shape{
    @Override
    public void draw() {
        System.out.println("矩形！");
    }
}
class  Cycle extends Shape{
    @Override
    public void draw() {
        System.out.println("圆形！");
    }
}
class Flower extends Shape{
    @Override
    public void draw() {
        System.out.println("花!");
    }
}
public class Test {
    public static void dropMap1(Shape shape)
    {
        shape.draw();
    }


    public static void drawMap2() {
        Rect rect = new Rect();
        Cycle cycle = new Cycle();
        Flower flower = new Flower();
        String[] shapes = {"cycle", "rect", "cycle", "rect", "flower"};
        for (String shape : shapes) {
            if (shape.equals("cycle")) {
                cycle.draw();
            } else if (shape.equals("rect")) {
                rect.draw();
            } else if (shape.equals("flower")) {
                flower.draw();
            }
        }
    }


    public static void drawMap3() {

        Rect rect = new Rect();
        Cycle cycle = new Cycle();
        Flower flower = new Flower();
        Shape[] shape1 = {cycle, rect, cycle, rect,flower};
        for (Shape sh : shape1) {
            sh.draw();
        }
//    // 我们创建了一个 Shape 对象的数组.
//        Shape[] shape = {new Cycle(), new Rect(), new Cycle(),new Rect(), new Flower()};
//        for (Shape shape : shape) {
//            shape.draw();
//        }
    }

    public static void main(String[] args) {
        drawMap3();
//        Rect rect =new Rect();
//        Cycle cycle=new Cycle();
//        Flower flower=new Flower();
//        dropMap(rect);
//        dropMap(cycle);
//        dropMap(new Flower());

    }
}
